package org.elsfs.framework.sql;

import java.io.Serializable;
import java.util.List;

/**
 * 分页 Page 对象接口
 *
 * @author zeng
 * @since 0.0.1
 */
public interface Page<T> extends Serializable {

  /** 当前分页总页数 */
  default long getPages() {
    if (getSize() == 0) {
      return 0L;
    }
    long pages = getTotal() / getSize();
    if (getTotal() % getSize() != 0) {
      pages++;
    }
    return pages;
  }

  /**
   * 分页记录列表
   *
   * @return 分页对象记录列表
   */
  Iterable<T> getRecords();

  /** 设置分页记录列表 */
  Page<T> setRecords(List<T> records);

  /**
   * 当前满足条件总行数
   *
   * @return 总条数
   */
  long getTotal();

  /** 设置当前满足条件总行数 */
  Page<T> setTotal(long total);

  /**
   * 获取每页显示条数
   *
   * @return 每页显示条数
   */
  long getSize();

  /** 设置每页显示条数 */
  Page<T> setSize(long size);

  /**
   * 当前页
   *
   * @return 当前页
   */
  long getCurrent();

  /** 设置当前页 */
  Page<T> setCurrent(long current);
}
